﻿using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace Masuit.Tools.Strings
{
	/// <summary>
	/// 模版引擎
	/// </summary>
	public class Template
	{
		private string Content { get; set; }

		/// <summary>
		/// 模版引擎
		/// </summary>
		/// <param name="content"></param>
		public Template(string content)
		{
			Content = content;
		}

		/// <summary>
		/// 创建模板
		/// </summary>
		/// <param name="content"></param>
		/// <returns></returns>
		public static Template Create(string content)
		{
			return new Template(content);
		}

		/// <summary>
		/// 设置变量
		/// </summary>
		/// <param name="key"></param>
		/// <param name="value"></param>
		/// <returns></returns>
		public Template Set(string key, string value)
		{
			Content = Content.Replace("{{" + key + "}}", value);
			return this;
		}

		/// <summary>
		/// 设置变量
		/// </summary>
		public Template Set(object obj)
		{
			var dic = obj.ToDictionary();
			Set(dic);
			return this;
		}

		/// <summary>
		/// 设置变量
		/// </summary>
		public Template Set(Dictionary<string, string> dic)
		{
			foreach (var x in dic)
			{
				Content = Content.Replace("{{" + x.Key + "}}", x.Value);
			}

			return this;
		}

		/// <summary>
		/// 设置变量
		/// </summary>
		public Template Set(Dictionary<string, object> dic)
		{
			foreach (var x in dic)
			{
				Content = Content.Replace("{{" + x.Key + "}}", x.Value.ToString());
			}

			return this;
		}

		/// <summary>
		/// 渲染模板
		/// </summary>
		/// <param name="check">是否检查未使用的模板变量</param>
		/// <returns></returns>
		public string Render(bool check = false)
		{
			if (check)
			{
				var mc = Regex.Matches(Content, @"\{\{.+?\}\}");
				foreach (Match m in mc)
				{
					throw new ArgumentException($"模版变量{m.Value}未被使用");
				}
			}

			return Content;
		}
	}
}
